home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Camelot
/
Camelot 134 (1991-10)(Swedish User Group of Amiga)(SE)(PD)[WB].zip
/
Camelot 134 (1991-10)(Swedish User Group of Amiga)(SE)(PD)[WB].adf
/
GIFMachine
/
Sources
/
mymem.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-09-01
|
1KB
|
63 lines
/* Copyright 1990 by Christopher A. Wichura.
See file GIFMachine.doc for full description of rights.
*/
#include <exec/types.h>
#include <exec/lists.h>
#include <exec/nodes.h>
#include <exec/memory.h>
#include <clib/alib_protos.h>
#include <clib/exec_protos.h>
#include <pragmas/exec_lib.h>
struct MyMem {
struct MinNode mm_Node;
ULONG mm_Size;
};
struct MinList Mem[2];
UWORD CurrentMem;
void InitMemory(void)
{
NewList((struct List *)&Mem[0]);
NewList((struct List *)&Mem[1]);
CurrentMem = 0;
}
char *MyAlloc(ULONG size)
{
register struct MyMem *theMemory;
register ULONG newsize;
newsize = size + sizeof(struct MyMem);
if (!(theMemory = (struct MyMem *)AllocMem(newsize, MEMF_PUBLIC|MEMF_CLEAR)))
return NULL;
AddTail((struct List *)&Mem[CurrentMem], (struct Node *)&theMemory->mm_Node);
theMemory->mm_Size = newsize;
return (char *)theMemory + sizeof(struct MyMem);
}
void MyFree(char *MemPtr)
{
register struct MyMem *theMemory;
theMemory = (struct MyMem *)(MemPtr - sizeof(struct MyMem));
Remove((struct Node *)&theMemory->mm_Node);
FreeMem((char *)theMemory, theMemory->mm_Size);
}
void FreeAll(UWORD memlist)
{
register struct MyMem *theMemory;
while (theMemory = (struct MyMem *)RemTail((struct List *)&Mem[memlist]))
FreeMem((char *)theMemory, theMemory->mm_Size);
}